package entity

import (
	"time"
)

// LoginLog 登录日志
type LoginLog struct {
	ID        uint      `json:"id" gorm:"primaryKey"`
	TenantID  uint      `json:"tenant_id" gorm:"index"`
	UserID    uint      `json:"user_id" gorm:"index"`
	IP        string    `json:"ip" gorm:"size:50"`          // IP地址
	UserAgent string    `json:"user_agent" gorm:"size:255"` // 用户代理
	Status    int       `json:"status" gorm:"default:1"`    // 状态：1-成功，2-失败
	Message   string    `json:"message" gorm:"size:255"`    // 消息
	LoginTime time.Time `json:"login_time"`                 // 登录时间
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// TableName 指定表名
func (LoginLog) TableName() string {
	return "system_log_login"
}

// OperationLog 操作日志
type OperationLog struct {
	ID         uint      `json:"id" gorm:"primaryKey"`
	TenantID   uint      `json:"tenant_id" gorm:"index"`
	UserID     uint      `json:"user_id" gorm:"index"`
	Module     string    `json:"module" gorm:"size:50"`      // 模块名称
	Action     string    `json:"action" gorm:"size:50"`      // 操作类型
	TargetID   uint      `json:"target_id" gorm:"index"`     // 操作对象ID
	TargetType string    `json:"target_type" gorm:"size:50"` // 操作对象类型
	Content    string    `json:"content" gorm:"size:500"`    // 操作内容
	Status     int       `json:"status" gorm:"default:1"`    // 状态：1-成功，2-失败
	Message    string    `json:"message" gorm:"size:255"`    // 消息
	IP         string    `json:"ip" gorm:"size:50"`          // IP地址
	UserAgent  string    `json:"user_agent" gorm:"size:255"` // 用户代理
	CreatedAt  time.Time `json:"created_at"`
	UpdatedAt  time.Time `json:"updated_at"`
}

// TableName 指定表名
func (OperationLog) TableName() string {
	return "system_log_operation"
}

// ErrorLog 错误日志
type ErrorLog struct {
	ID        uint      `json:"id" gorm:"primaryKey"`
	TenantID  uint      `json:"tenant_id" gorm:"index"`
	UserID    uint      `json:"user_id" gorm:"index"`
	Level     string    `json:"level" gorm:"size:20"`       // 错误级别
	Module    string    `json:"module" gorm:"size:50"`      // 模块名称
	Message   string    `json:"message" gorm:"size:500"`    // 错误消息
	Stack     string    `json:"stack" gorm:"type:text"`     // 堆栈信息
	IP        string    `json:"ip" gorm:"size:50"`          // IP地址
	UserAgent string    `json:"user_agent" gorm:"size:255"` // 用户代理
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// TableName 指定表名
func (ErrorLog) TableName() string {
	return "system_log_error"
}

type EmailLog struct {
	ID        uint      `json:"id" gorm:"primaryKey"`
	TenantID  uint      `json:"tenant_id" gorm:"index"`
	UserID    uint      `json:"user_id" gorm:"index"`
	Subject   string    `json:"subject" gorm:"size:255"`    // 邮件主题
	Content   string    `json:"content" gorm:"type:text"`   // 邮件内容
	To        string    `json:"to" gorm:"size:255"`         // 收件人
	CC        string    `json:"cc" gorm:"size:255"`         // 抄送人
	BCC       string    `json:"bcc" gorm:"size:255"`        // 密送人
	Status    int       `json:"status" gorm:"default:1"`    // 状态：1-成功，2-失败
	Message   string    `json:"message" gorm:"size:255"`    // 消息
	IP        string    `json:"ip" gorm:"size:50"`          // IP地址
	UserAgent string    `json:"user_agent" gorm:"size:255"` // 用户代理
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// TableName 指定表名
func (EmailLog) TableName() string {
	return "system_log_email"
}

type SmsLog struct {
	ID        uint      `json:"id" gorm:"primaryKey"`
	TenantID  uint      `json:"tenant_id" gorm:"index"`
	UserID    uint      `json:"user_id" gorm:"index"`
	Content   string    `json:"content" gorm:"size:255"`    // 短信内容
	To        string    `json:"to" gorm:"size:255"`         // 收件人
	Status    int       `json:"status" gorm:"default:1"`    // 状态：1-成功，2-失败
	Message   string    `json:"message" gorm:"size:255"`    // 消息
	IP        string    `json:"ip" gorm:"size:50"`          // IP地址
	UserAgent string    `json:"user_agent" gorm:"size:255"` // 用户代理
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// TableName 指定表名
func (SmsLog) TableName() string {
	return "system_log_sms"
}
